#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
//class Solution {
//public:
//    bool judge(char ch)
//    {
//        if (ch >= 65 && ch <= 90)
//            return true;
//        return false;
//    }
//    bool JUDGE(char ch)
//    {
//        if (ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 0 + '0' && ch <= '0' + 9)
//            return true;
//        return false;
//    }
//    bool isPalindrome(string s) {
//        string S1;
//        string S2;
//        for (auto ch : s)
//        {
//            if (JUDGE(ch))
//            {
//                if (judge(ch))
//                {
//                    S1 += 32 + ch;
//                    S2.insert(0, 1, ch + 32);
//                }
//                else
//                {
//                    S1 += ch;
//                    S2.insert(0, 1, ch);
//                }
//            }
//        }
//        if (S1 == S2)
//            return true;
//        return false;
//    }
//};

class Solution
{
public:
    bool isLetterOrNumber(char ch)
    {
        return(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9');
    }
    bool iscapital(char ch)
    {
        return(ch >= 'A' && ch <= 'Z');
    }
    bool isPalindrome(string s)
    {
        for (int i = 0; i < s.size(); i++)
        {
            if (iscapital(s[i]))
            {
                s[i] += 32;
            }
        }
        int begin = 0; int end = s.size() - 1;
        while (begin < end)
        {
            while (begin < end && !isLetterOrNumber(s[begin]))
            {
                ++begin;
            }
            while (begin < end && !isLetterOrNumber(s[end]))
            {
                --end;
            }
            if (s[begin] != s[end])
            {
                return false;
            }
            ++begin; --end;
        }
        return true;
    }
};
int main()
{
    string S1("A man, a plan, a canal: Panama");
    Solution s;
    cout << s.isPalindrome(S1) << endl;
    return 0;
}